home *** CD-ROM | disk | FTP | other *** search
- (* Find the cmallest positive integer that can be represented
- as the sum of two cubes (integers raised to the third power)
- in two different ways. *)
-
- MODULE sumofcubes;
-
- FROM InOut IMPORT WriteString, WriteCard, WriteLn;
-
- VAR i,ih,il,min,a,b,k: CARDINAL;
- j,sum,pwr: ARRAY [1..200] OF CARDINAL;
- (* pwr[k] = power of k, sum[k] = p[k] + p[j[k]],
- j[k] = columnindex of last considered candidate in row k,
- ih = rowindex of highest considered fow,
- il = rowindex of least still relevant row *)
-
- BEGIN
- i := 1; il := 1; ih := 2;
- j[1] := 1; j[2] := 1;
- pwr[1] := 1; pwr[2] := 8;
- sum[1] := 2; sum[2] := 9;
- REPEAT
- min := sum[i];
- a := i; b := j[i];
- (* now get the sum in rw i *)
- IF j[i] = i THEN
- INC(il);
- ELSE
- IF j[i] = 1 THEN
- (* the new min was from the first column, now add
- a new row before taking the new sum from the old row *)
- INC(ih);
- pwr[ih] := ih*ih*ih;
- j[ih] := 1;
- sum[ih] := pwr[ih] + 1
- END;
- j[i] := j[i] + 1;
- sum[i] := pwr[i] + pwr[j[i]]
- END;
- (* now find minimal candidate in rows ol..ih *)
- i := il; k := i+1;
- WHILE k <= ih DO
- IF sum[k] < sum[i] THEN i := k END;
- INC(k)
- END
- UNTIL sum[i] = min;
- WriteCard(min,6); WriteCard(a,6);
- WriteCard(b,6); WriteCard(i,6);
- WriteCard(j[i],6); WriteLn
- END sumofcubes.
-